package com.mojito.learn.design.patterns;

import java.util.Collection;
import java.util.Enumeration;

/**
 * 适配器模式
 * <p>
 * 将一个类的接口, 转换成客户期望的另一个接口。 适配器让原本接口不兼容的类可以合作无间。 对象适配器使用组合, 类适配器使用多重继承。
 * <p>
 * 实现场景：
 * <p>
 * * {@link java.util.Arrays#asList(Object[])}
 * * {@link java.util.Collections#list(Enumeration)} ()}
 * * {@link java.util.Collections#enumeration(Collection)} ()}
 * * {@link javax.xml.bind.annotation.adapters.XmlAdapter}
 *
 * @author liufq
 * @since 2022/1/25 下午4:12
 */
public class AdapterPattern {

    public static void main(String[] args) {
        Turkey turkey = new WildTurkey();
        Duck duck = new TurkeyAdapter(turkey);
        duck.quack();
    }

    public interface Duck {
        void quack();
    }

    public interface Turkey {
        void gobble();
    }

    public static class WildTurkey implements Turkey {
        @Override
        public void gobble() {
            System.out.println("gobble!");
        }
    }

    public static class TurkeyAdapter implements Duck {
        Turkey turkey;

        public TurkeyAdapter(Turkey turkey) {
            this.turkey = turkey;
        }

        @Override
        public void quack() {
            turkey.gobble();
        }
    }
}
